
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

//判断x(大于1的自然数数)是否为质数，x为质数则返回1，否则返回0
unsigned int IsPrimeNumber(unsigned int x)
{
	if (x == 2)
		return (1);
	for (int i = 2; i <= round(sqrt(x)); i++)
	{
		if ((x % i) == 0)
			return (0);
	}
	return (1);
}

//产生一个16位随机数
unsigned short myFuncGenU16RandNum(void)
{
	unsigned short randNum;
	//	printf("%d",RAND_MAX); RAND_MAX为32767，只有15位
	randNum = (rand() << 15) + ((rand() << 5)) + rand() ; 
	//产生随机数的方法有多种，这里只是一个示例
	//	
	return (randNum);
}

//产生一个32位随机数
unsigned int myFuncGenU32RandNum(void)
{
	unsigned int randNum;
	//	printf("%d",RAND_MAX); RAND_MAX为32767，只有15位
	randNum = (rand() << 25) + (rand() << 15) + ((rand() << 5)) + rand() ; 
	//产生随机数的方法有多种，这里只是一个示例
	//	
	return (randNum);
}


/*将一个无符号10进制整数的uNumber二进制位找出来，
返回的字符串中，低位在前, 高位在后
*/
void myFuncToBin2(unsigned long int uNumber,char *p)
{
	// 用递归来做。输入参数可以在unsigned long int范围内。
	if (uNumber >= 2)
	{
		myFuncToBin2(uNumber / 2,p+1);
	}
	if (uNumber % 2 == 1)
		*p  = '1';
		else
		*p  = '0';
}

//打印一个16位整数的各个bit
void myFuncUint16ToBin(unsigned short uNumber)
{
	char str[16] = "";
	myFuncToBin2(uNumber,str);
//	printf("\n二进制数为：\n");
	for (int i = 15; i >= 0; i--)
	{
		if (str[i] == '\0')
			putchar('0');
		else
			putchar(str[i]);
	}
}

//打印一个32位整数的各个bit
void myFuncUint32ToBin(unsigned int uNumber)
{
	char str[32] = "";
	myFuncToBin2(uNumber,str);
//	printf("\n二进制数为：\n");
	for (int i = 31; i >= 0; i--)
	{
		if (str[i] == '\0')
			putchar('0');
		else
			putchar(str[i]);
	}
}


//将一个无符号10进制整数的二进制位打印出来。
void myFuncToBin(unsigned long int uNumber);

void myFuncToBin(unsigned long int uNumber)
{
	// 用递归来做。输入参数可以在unsigned long int范围内。
	if (uNumber >= 2)
	{
		myFuncToBin(uNumber / 2);
	}
	if (uNumber % 2 == 1)
		putchar('1');
	else
		putchar('0');
}
